package com.huiminpay.merchant.api;

import com.huiminpay.common.cache.domain.BusinessException;
import com.huiminpay.common.cache.domain.PageVO;
import com.huiminpay.merchant.dto.MerchantDTO;
import com.huiminpay.merchant.dto.StaffDTO;
import com.huiminpay.merchant.dto.StoreDTO;

/**
 * @Author: yz
 * @Date: 2024/7/17 19:13
 */
public interface MerchantService {
    /**
     * 根据主键查询商户信息
     * @param id
     * @return
     */
    MerchantDTO MerchantById(Long id);

    /**
     * 新增商户
     * @param merchantDTO
     * @return 返回商户
     */
    MerchantDTO createMerchant(MerchantDTO merchantDTO) throws BusinessException;

    /**
     * 资质申请接口
     * @param merchantId 商户id
     * @param merchantDTO 资质申请的信息
     * @throws BusinessException
     */
    void applyMerchant(Long merchantId,MerchantDTO merchantDTO) throws BusinessException;

    /**
     * 商户资质审核通过新增门店
     *
     * @param storeDTO
     * @return
     * @throws BusinessException
     */
    StoreDTO createStore(StoreDTO storeDTO) throws BusinessException;

    /**
     * 新增员工
     * @param staffDTO
     * @return
     * @throws BusinessException
     */
    StaffDTO  createStaff(StaffDTO staffDTO) throws BusinessException;

    /**
     * 添加门店和员工绑定关系
     * @param storeId
     * @param staffId
     * @throws BusinessException
     */
    void createStoreStaff(Long  storeId,Long staffId) throws BusinessException;

    /**
     * 根据租户id查询商户的信息
     * @param tenantId
     * @return
     */
     MerchantDTO queryMerchantByTenantId(Long tenantId) throws BusinessException;


    /**
     * 分页条件查询商户下的门店
     * @param storeDTO 查询条件
     * @param pageNum 当前页
     * @param pageSize 页大小
     * @return 门店列表
     */
     PageVO<StoreDTO> queryStoreByPage(StoreDTO storeDTO,Integer pageNum,Integer pageSize);


    /**
     * 查询门店是否属于某商户
     * @param storeId 门店id
     * @param merchantId 商户id
     * @return 门店是否属于商户 true 属于 false 不属于
     */
    Boolean queryStoreInMerchant(Long storeId, Long merchantId);

}
